/**
 * 权限管理中间件
 * 验证管理员是否拥有特定操作的权限
 */

const logger = require('../../logger');

/**
 * 权限验证中间件工厂函数
 * @param {Array} allowedRoles - 允许的角色列表
 * @returns {Function} Express中间件函数
 */
const authorize = (allowedRoles) => {
    return (req, res, next) => {
        try {
            // 确保用户已经通过认证
            if (!req.user) {
                return res.status(401).json({
                    error: 'Unauthorized',
                    message: '用户未认证'
                });
            }
            
            // 验证用户角色是否在允许列表中
            if (!allowedRoles.includes(req.user.role)) {
                logger.warn(`权限验证失败: 用户 ${req.user.username} (角色: ${req.user.role}) 尝试访问需要角色 ${allowedRoles.join(', ')} 的资源`);
                
                return res.status(403).json({
                    error: 'Forbidden',
                    message: '权限不足，无法执行此操作'
                });
            }
            
            logger.info(`权限验证成功: 用户 ${req.user.username} (角色: ${req.user.role})`);
            next();
        } catch (error) {
            logger.error(`权限验证过程中发生错误: ${error.message}`);
            res.status(500).json({
                error: 'InternalServerError',
                message: '权限验证失败'
            });
        }
    };
};

/**
 * 超级管理员权限验证
 */
const requireSuperAdmin = authorize(['superadmin']);

/**
 * 管理员或超级管理员权限验证
 */
const requireAdmin = authorize(['superadmin', 'admin']);

/**
 * 编辑器及以上权限验证
 */
const requireEditor = authorize(['superadmin', 'admin', 'editor']);

module.exports = {
    authorize,
    requireSuperAdmin,
    requireAdmin,
    requireEditor
};